package com.bifrost.model.ro.coupon;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;

import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Date;

/**
 * @author rangf
 * @date 2018/5/7
 */
@Data
public class CouponRO {

    private Long couponId;

    @NotEmpty(message = "优惠券类型编码不能为空")
    private String couponTypeCode;

    @NotEmpty(message = "名称不能为空")
    private String couponName;

    @NotEmpty(message = "描述不能为空")
    private String couponDescription;

    @NotNull(message = "数量不能为空")
    private Integer couponQuantity;

    @NotEmpty(message = "富机编码规则不能为空")
    private String ruleCode;

    @NotNull(message = "生效起止日期不能为空")
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
    private Date activeStartDate;

    @NotNull(message = "生效起止日期不能为空")
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
    private Date activeEndDate;

    @NotNull(message = "优惠券状态不能为空")
    private Boolean enabled;

    /** 每个用户最多领取次数 */
    @NotNull(message = "领取限制不能为空")
    private Integer maxUsesPerCustomer;

   /** 发放目标需满足 订单项数量 */
    @NotNull(message = "数量条件不能为空")
    private Integer relatedTargetQuantity;

    /** 订单最小金额 */
    @NotNull(message = "满足优惠券最小金额不能为空")
    private BigDecimal orderMinTotal;

    /** 折扣金额 */
    @NotNull(message = "折扣金额不能为空")
    private BigDecimal discountAmount;

    /** 发放日期 */
    @NotNull(message = "发放日期起始不能为空")
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
    private Date releaseDateEnd;

    /** 发放日期 */
    @NotNull(message = "发放日期止不能为空")
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
    private Date releaseDateStart;

    /** 优惠券价格 */
    @NotNull(message = "优惠券价格")
    private BigDecimal price;

    /** 积分 */
    private BigInteger bonusPoints;


    /*@NotEmpty(message = "订单类型不能为空")*/
    private String forOrderType;
    /** 图片 */
    private Long mediaId;
    /** 有效期方式: 1按照领取日、2按时间段 */
//    @NotEmpty(message = "有效方式不能为空")
//    private String validityType;
    /** 有效期天数 */
    private Integer validityDays;
    @NotNull(message = "是否支持退劵不能为空")
    private boolean refundable;
    @NotNull(message = "是否可叠加使用不能为空")
    private boolean stackedWithOther;
    /** 放放模式：1积分兑换、2现金购买*/
    @NotEmpty(message = "发放模式不能为空")
    private String releaseMode;

}
